﻿//----------------------------------------------------------------
// Desc: 
// Edit: ShowLong, http://blog.csdn.net/showlong
//
// Date Created: 2010-03-17
//
// Update Date :            
//
// Copyright (c) Fuel4D (http://www.fuel4d.com), All rights reserved.
//
//----------------------------------------------------------------
#pragma once


class FAPI FUI_Slider : public FUI_Object
{
    FUI_DECLARE_CLASS(FUI_Slider)

public:
    FUI_Slider(EF_UI_WIDGET_TYPE t = eUWT_Slider);

    virtual void Render(EF_UI_RENDER_LAYER layer);
    virtual void UpdateRect();
    virtual bool IsChild(FUI_Object* pChild);
    virtual void SetWidth(funit w);
    virtual void SetEnable(bool enable){ m_btnButton.SetEnable(enable); }
    virtual bool IsEnable(){ return m_btnButton.IsEnable(); }
    virtual bool OnMouseMove(funit nX, funit nY);
    virtual bool OnLButtonDown(funit nX, funit nY);
    virtual bool OnLButtonUp(funit nX, funit nY);

    // 设置当前值
    void SetValue(int n);
    // 设置最大值
    void SetMax(int n);
    FINLINE int GetMax(){ return m_nMax; }
    FINLINE int GetValue(){ return m_nValue; }
    // 获取尺寸相关数据
    FINLINE int GetBarWidth(){ return (int)m_btnButton.GetWidth(); }
    FINLINE int GetBarHeight(){ return (int)m_btnButton.GetHeight(); }
    FINLINE int GetWidgetWidth(){ return (int)(GetWidth() - GetBarWidth() - GetLeftWidth() - GetRightWidth()); }
    virtual int GetLeftWidth(){ return 0; }
    virtual int GetRightWidth(){ return 0; }
    // 更新BAR
    void UpdateBar();
    // 获取部分控件数据
    FINLINE FUI_Button& GetButton(){ return m_btnButton; }

protected:
    virtual void InitUIData(FUI_Object* father, fuWidgetBase* pData, FUI_Layout* layout);

protected:
    fuWidgetSlider* pSliderData;    // 控件数据地址
    FUI_Button m_btnButton;
    int m_nMax;                     // 最大值
    int m_nValue;                   // 当前值
    int m_nWidgetWidth;             // 总的滑块长度
    bool m_bIsDown;                 // 鼠标左键是否按下
    DWORD m_dwDownTime;             // 按下时候的时间
    int m_nDownXPos;                // 按下时的X编移
    int m_nDownValue;               // 按下时的值    
};
